package main

import "fmt"

func main() {
	var slice []string
	fmt.Println(slice)
	fmt.Println(slice == nil)
	var slice2 = []int{}
	fmt.Println(slice2 == nil)
	var slice3 = []bool{false, true}
	fmt.Println(slice3)
	fmt.Println(slice3 == nil)
	// 用make 做初始化
	var slice4 = make([]int, 0, 0) //长度， 容量
	fmt.Println(slice4)

	// 引用类型，slice map channel 都是引用类型，数据传递时都是引用传递
	var slice5 = []int{1, 2, 3}
	slice6 := slice5
	slice6[0] = 3
	fmt.Println(slice5, slice6)

	// 切片长度容量
	// 切片的容量从切片开始的为止开始计算，到底层数组到以后一个
	a := [8]int{0, 1, 2, 3, 4, 5, 6, 7}
	fmt.Printf("\n\n\n%T\n", a)
	b := a[5:7]
	fmt.Printf("%T %d %d\n", b, len(b), cap(b))
	c := b[:cap(b)]
	fmt.Printf("%T %d %v\n", c, len(c), cap(c))

	// 遍历
	var slice7 = []int{1, 2, 3, 4, 5}
	for i := 0; i < len(slice7); i++ {
		fmt.Println(slice7[i])
	}

	for _, value := range slice7 {
		fmt.Println(value)
	}

	var slice8 = make([]int, 0)
	for i := 0; i <= 10; i++ {
		slice8 = append(slice8, i)
	}
	fmt.Println(slice8)
	var slice9 = []int{10, 11, 12}
	slice8 = append(slice8, slice9...)
	slice8 = append(slice8, 13, 14, 15, 16, 17)
	fmt.Println(slice8)
	// 删除元素
	var slice10 = []int{30, 31, 32, 33, 34, 45}
	slice10 = append(slice10[:2], slice10[3:]...)
	fmt.Println(slice10)
}
